var express = require('express');
var router = express.Router();
var superagent = require('superagent');
var request = require('request');

var async  = require( 'async'); // 同步控制
var CONFIG = require('../../common/config');
var CODE = require('../../common/code');

var checkUtil = require('./util/checkUtil');
var callFuncUtil = require('./util/callFuncUtil');

// ***** 外部直接调用接口 *****

//------------------------------------------------------------------
/* GET listing. */
router.get('/', function(req, res, next) {
    res.send('Respond From CallFunc!');
});

//------------------------------------------------------------------
// 测试用
function tmpTst(req,res,next){
    var use = checkUtil.numberFromReq(req, 'use');
    callFuncUtil.tmpTst(use, function(error, ret){
        if(error){
            console.log(error);
            return callFuncUtil.ret_func_json(0, CODE.OPERATION_FAILED,[],res);
        }

        return callFuncUtil.ret_func_json(1, CODE.OPERATION_SUCCESS,ret,res);
    });
}
router.get('/tmpTst', tmpTst);
router.post('/tmpTst', tmpTst);

//-----------------------------------------------------------------
/**定时更新本地DB物流数据 接口
 * author--李琦 kris
 * force: 1强制更新; 0只更新如下物流（0未知，1揽件中，2在途中，3派件中）
 * 地址：localhost:3000/callFunc/updExpTrackData
 */
function updExpTrackData(req,res,next){
    res.header("Access-Control-Allow-Origin", "*");//设置跨域访问
    var key = req.query.key || req.body.key || null;
    var force = Number(req.query.force || req.body.force || '0')||0;
    if(key == null){
        return callFuncUtil.ret_func_json(0,'参数错误',{},res);
    }
    callFuncUtil.updExpTrackDataService(force, function(err,ret){
        if(err){
            console.log('/callFunc/updExpTrackData Error:'+err);
            return callFuncUtil.ret_func_json(0, CODE.OPERATION_FAILED,[],res);
        }
        return callFuncUtil.ret_func_json(1, CODE.OPERATION_SUCCESS,ret,res);
    });
}
router.get('/updExpTrackData',updExpTrackData);
router.post('/updExpTrackData',updExpTrackData);




//------------------------------------------------------------------
/* 刷新优惠码缓存
 * 方式:POST
 * 参数: use: 20 APP抽奖用, 30 城市合伙人抽奖用
 * 参数: maxCnt: 最大个数
 * 参数: flg: 1:返回id
 * 参数: add[可选]: 0 重置(默认), 1 对现有的添加
 * 返回:
 * {"success":1,
 *  "msg":"成功",
 *  "data": {
 *     ids: [1,2,3], // c_id
 *     cnt: 3
 *   }
 * }
 * */
function setCouponCache(req, res, next) {
    res.header("Access-Control-Allow-Origin", "*");   //设置跨域访问

    var use = checkUtil.numberFromReq(req, 'use');
    if(use!=20 && use!=30 && use!=31 && use!=32) {
        return callFuncUtil.ret_func_json(0,'用途指定错误',{},res);
    }

    var maxCnt = checkUtil.numberFromReq(req, 'maxCnt');
    if(maxCnt<=0 || maxCnt>=2000) {
        return callFuncUtil.ret_func_json(0,'数量指定错误',{},res);
    }

    var flg = checkUtil.numberFromReq(req, 'flg');

    var add = checkUtil.numberFromReq(req, 'add');
    if(add<=0 || isNaN(add)) {
        add = 0;
    }

    callFuncUtil.setCouponCache(use, maxCnt, flg, add, function(error, ret){
        if(error){
            console.log(error);
            return callFuncUtil.ret_func_json(0, error,[],res);// CODE.OPERATION_FAILED
        }

        return callFuncUtil.ret_func_json(1, CODE.OPERATION_SUCCESS,ret,res);
    });
}
router.get('/setCouponCache', setCouponCache);
router.post('/setCouponCache', setCouponCache);

/**
 * 检查优惠券缓存
 * 参数: use: 20 APP抽奖用, 30 城市合伙人抽奖用
 * 参数: flg: 是否返回key
 */
function cntCouponCache(req, res, next) {
    res.header("Access-Control-Allow-Origin", "*");   //设置跨域访问

    var use = checkUtil.numberFromReq(req, 'use');
    if(use!=20 && use!=30 && use!=31 && use!=32) {
        return callFuncUtil.ret_func_json(0,'用途指定错误',{},res);
    }

    var flg = checkUtil.numberFromReq(req, 'flg');

    callFuncUtil.cntCouponCache(use, flg, function(error, ret){
        if(error){
            console.log(error);
            return callFuncUtil.ret_func_json(0, CODE.OPERATION_FAILED,[],res);
        }

        return callFuncUtil.ret_func_json(1, CODE.OPERATION_SUCCESS,ret,res);
    });
}
router.get('/cntCouponCache', cntCouponCache);
router.post('/cntCouponCache', cntCouponCache);

//------------------------------------------------------------------
/* 随机抽取优惠码
 * 方式:POST
 * 参数: use: 20 APP抽奖用, 30 城市合伙人抽奖用
 * 参数: maxCnt: 最大获取个数
 * 返回:
 * {"success":1,
 *  "msg":"成功",
 *  "data":['xxx','yyy'] // code
 * }
 * */
function getRandomCoupon(req, res, next) {

    var use = checkUtil.numberFromReq(req, 'use');
    if(use!=20 && use!=30 && use!=31 && use!=32) {
        return callFuncUtil.ret_func_json(0,'用途指定错误',{},res);
    }

    var maxCnt = checkUtil.numberFromReq(req, 'maxCnt');
    if(maxCnt<=0 || maxCnt>=10) {
        return callFuncUtil.ret_func_json(0,'数量指定错误',{},res);
    }

    if(CONFIG.DEBUG) {
        callFuncUtil.getRandomCouponFromCache(use, 0, maxCnt, function(error, ret){
            if(error){
                console.log(error);
                return callFuncUtil.ret_func_json(0, error,[],res);// CODE.OPERATION_FAILED
            }

            return callFuncUtil.ret_func_json(1, CODE.OPERATION_SUCCESS,ret,res);
        });
    } else {
        return callFuncUtil.ret_func_json(0,'非法访问！',{},res);
    }
}
router.get('/getRandomCoupon', getRandomCoupon);
router.post('/getRandomCoupon', getRandomCoupon);

//------------------------------------------------------------------
/* 设置模版应用数
 * 方式:POST
 * 参数: radix[可选]: 基础倍数 (默认11，表示真实数据的11倍)
 * 参数: type[可选]: 模版大分类 (默认为全部)
 * 参数: ids[可选]: 逗号连接的模版id (例如：1,23,434)
 * 返回:
 * {"success":1,
 *  "msg":"成功",
 * }
 * */
function setTmplApplyCnt(req, res, next) {
    res.header("Access-Control-Allow-Origin", "*");   //设置跨域访问

    var radix = checkUtil.numberFromReq(req, 'radix');
    if(radix<=0) {
        radix=11;
    }

    var type = checkUtil.numberFromReq(req, 'type');
    if(type<=0) {
        type=null;
    }

    var ids = checkUtil.stringFromReq(req, 'ids');

    callFuncUtil.setTmplApplyCnt(radix, type, ids, function(error, ret){
        if(error){
            console.log(error);
            return callFuncUtil.ret_func_json(0,CODE.OPERATION_FAILED,{},res);
        }

        return callFuncUtil.ret_func_json(1,CODE.OPERATION_SUCCESS,ret,res);
    });
}
router.get('/setTmplApplyCnt', setTmplApplyCnt);
router.post('/setTmplApplyCnt', setTmplApplyCnt);


//------------------------------------------------------------------
/* 设置一键秀模版 应用次数 作者：李琦
 * 方式:POST
 * 参数: radix[可选]: 基础倍数 (默认11，表示真实数据的11倍)
 * 参数: type 必填: 单页模板/视频模板
 * 参数: ids[可选]: 逗号连接的模版id (例如：1,23,434)
 * return : {"success":1, "msg":"成功"}
 * 请求地址：http://localhost:3000/callFunc/setYjxTmplApplyCnt
 * */
function setYjxTmplApplyCnt(req, res, next) {
    res.header("Access-Control-Allow-Origin", "*");   //设置跨域访问

    var radix = checkUtil.numberFromReq(req, 'radix'); // 参数验证
    if(radix<=0) {
        radix=11;
    }

    var type = checkUtil.numberFromReq(req, 'type');
    if(type<=0) {
        return callFuncUtil.ret_func_json(0, "参数为空",[],res);
    }

    var ids = checkUtil.stringFromReq(req, 'ids');

    callFuncUtil.setYjxTmplApplyCnt(radix, type, ids, function(error, ret){
        if(error){
            console.log(error);
            return callFuncUtil.ret_func_json(0,CODE.OPERATION_FAILED,{},res);
        }

        return callFuncUtil.ret_func_json(1,CODE.OPERATION_SUCCESS,ret,res);
    });
}
router.get('/setYjxTmplApplyCnt', setYjxTmplApplyCnt);
router.post('/setYjxTmplApplyCnt', setYjxTmplApplyCnt);




//------------------------------------------------------------------
/* 刷新合伙人月度销售排名信息
 * 方式:POST
 * 参数: y: 年份
 * 参数: m: 月份
 * 返回:
 * {"success":1,
 *  "msg":"成功",
 * }
 * */
function refreshSaleRankInfo(req, res, next) {
    res.header("Access-Control-Allow-Origin", "*");   //设置跨域访问

    var y = checkUtil.numberFromReq(req, 'y')||0;
    var m = checkUtil.numberFromReq(req, 'm')||0;
    if(y<2016 || m<1 || m>12) {
        return callFuncUtil.ret_func_json(0,'参数错误',{},res);
    }

    callFuncUtil.refreshSaleRankInfo(function(err, ret){
        if(err){
            console.log(err);
            return callFuncUtil.ret_func_json(0,CODE.OPERATION_FAILED,{},res);
        }

        return callFuncUtil.ret_func_json(1,CODE.OPERATION_SUCCESS,ret,res);

    }, y, m);
}
router.get('/refreshSaleRankInfo', refreshSaleRankInfo);
router.post('/refreshSaleRankInfo', refreshSaleRankInfo);

//------------------------------------------------------------------
module.exports = router;
